<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

</body>
<script>
    /*
         1:async
            被async 修饰的函数返回值是一个promise对象,如果是return 那么则用then获取值
            如果是 throw 那么则用catch获取值

         2:await表达式
            await表达式右边一般为promise对象,但是也可以是其他的值,
            如果是表达式是promise对象,await返回的是promise成功的值.
            如果await的promise失败了,就会抛出异常,需要try catch来获取
            如果是其他的值,直接回将此值作为await的值返回.

         3:await
            await 必须要在被async修饰的函数中,async不一定要是await

    */

    async function fn1() {
        return 1;
        // throw "error"
    }

    fn1().then(res => {
        console.log(res, " fn1  res")
    }).catch(error => {
        console.log(error + " fn1  error")
    })

    //-------------------------

    const fn2 = () => {
        // throw 2
        return 1;
    };

    async function fn3() {
        try {
            const res = await fn2();
            console.log(res + " fn3 res")
        } catch (e) {
            console.log(e + "eeee")
        }
    }

    fn3();

    //-------------------------

    function fn4() {
        return new Promise((resolve, reject) => {
            setTimeout(() => {
                resolve(" fn4 成功");
                reject("fn4 失败");
            }, 1000)
        })
    }

    async function f5() {
        try {
            const res = await fn4();
            console.log(res)
        } catch (e) {
            console.log(e)
        }
    }

    f5();
</script>
</html>
